#include <stdio.h>
#include <unistd.h>
#include <pthread.h>


int ticket = 10000;
pthread_mutex_t lock;

//int doSomething()
//{
//    int myerrno = errno;
//    //myerrno
//    //
//}

int get_ticket(void *arg)
{
    usleep(1000);
    int num = (int)arg;

    while(1){
        pthread_mutex_lock(&lock);
        if(ticket > 0){
            usleep(1000);
            printf("thread %d, get a ticket,no: %d\n", num, ticket);
            ticket--;
            pthread_mutex_lock(&lock);
        }else{
            pthread_mutex_lock(&lock);
            break;
        }
    }
}

int main()
{
    int i = 0;
    pthread_t tid[4];
    pthread_mutex_init(&lock, NULL);
    for(; i < 1; i++){
        pthread_create(tid+i, NULL, get_ticket, (void*)i);
    }


    for(i=0; i <1;i++){
        pthread_join(tid[i], NULL);
    }

    pthread_mutex_destroy(&lock);
    return 0;
}




//#include <stdio.h>
//#include <stdlib.h>
//#include <sys/types.h>
//#include <sys/stat.h>
//#include <fcntl.h>
//#include <unistd.h>
//#include <pthread.h>
//
//int a = 10;
//
//void *thread_run(void* arg)
//{
////    pthread_detach(pthread_self());
//    while(1){
//        printf("%s, %lu, pid: %d\n", (char*)arg, pthread_self(), getpid());
//        printf("%s global vaiable: %d, %p\n", (char*)arg,a, &a);
//        sleep(1);
//     //   break;
//    }
//    //pthread_exit((void *)10);
//    return (void*)10;
//}
//
//int main()
//{
//    pthread_t tid;
//    pthread_t tid1;
//    pthread_create(&tid, NULL, thread_run, "thread 0");
//    pthread_create(&tid1, NULL, thread_run, "thread 1");
//
//    printf("main: %lu, pid: %d\n", pthread_self(), getpid());
//    printf("new thread %lu be canceled!\n", tid);
//    printf("before: %s global vaiable: %d, %p\n", "main",a, &a);
//    sleep(10);
//    a = 100;
//    printf("after: %s global vaiable: %d, %p\n", "main",a, &a);
//
//    void *ret = NULL;
//    pthread_join(tid, &ret);
//    printf("thread quit code : %d\n", (long long)ret);
//    return 100;
//}
//
//
//
//
//
//
//
